home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / ACORNUSERS / EMULATOR / EMUL6502 / Sources / TestAdc < prev   
Text File  |  1998-08-27  |  4KB  |  93 lines

  1. ;Alain BROBECKER (aka baah/Arm's Tech), 06jun1998 & 24aug1998
  2. ;
  3. ;Some tests to ensure that the adc/sbc emulation works fine in non-BCD mode.
  4. ;If a difference is found with results (computed by hand, or is it by mind? =)
  5. ;at the end of the source it jumps at adress 0 (should contain  &00='brk'),
  6. ;else it ends with the 'brk' inside the code (and you can relax =).
  7.  
  8.             #name TestAdcX
  9.             #list
  10.             #base       &100-4      ;Start assembly here
  11.             #rw         &100        ;Load adress
  12.             #rw         &100        ;Exec adress
  13.  
  14.   ldx #&ff              ;Initialise stack
  15.   txs
  16. ;adc & carry cleared                    NZCV
  17.   lda #1:clc:adc #1:php:pha         ;   ....    =2
  18.   lda #-1:clc:adc #-1:php:pha       ;   1.1.    =-2
  19.   lda #1:clc:adc #-1:php:pha        ;   .11.    =0
  20.   lda #-1:clc:adc #1:php:pha        ;   .11.    =0
  21.   lda #2:clc:adc #-1:php:pha        ;   ..1.    =1
  22.   lda #-1:clc:adc #2:php:pha        ;   ..1.    =1
  23.   lda #1:clc:adc #-2:php:pha        ;   1...    =-1
  24.   lda #-2:clc:adc #1:php:pha        ;   1...    =-1
  25.   lda #-128:clc:adc #-128:php:pha   ;   .111    =0 (wrong)
  26.   lda #-128:clc:adc #-1:php:pha     ;   ..11    =127 (wrong)
  27.   lda #-1:clc:adc #-128:php:pha     ;   ..11    =127 (wrong)
  28.   lda #127:clc:adc #1:php:pha       ;   1..1    =-128 (wrong)
  29.   lda #1:clc:adc #127:php:pha       ;   1..1    =-128 (wrong)
  30. ;adc & carry set                        NZCV
  31.   lda #1:sec:adc #1:php:pha         ;   ....    =3
  32.   lda #-1:sec:adc #-1:php:pha       ;   1.1.    =-1
  33.   lda #1:sec:adc #-2:php:pha        ;   .11.    =0
  34.   lda #2:sec:adc #-2:php:pha        ;   ..1.    =1
  35.   lda #1:sec:adc #-3:php:pha        ;   1...    =-1
  36.   lda #-128:sec:adc #-128:php:pha   ;   ..11    =1 (wrong)
  37.   lda #-128:sec:adc #-1:php:pha     ;   1.1.    =-128
  38.   lda #-128:sec:adc #-2:php:pha     ;   ..11    =127 (wrong)
  39.   lda #127:sec:adc #1:php:pha       ;   1..1    =-127 (wrong)
  40.   lda #126:sec:adc #1:php:pha       ;   1..1    =-128 (wrong)
  41. ;sbc & carry set                        NZCV
  42.   lda #1:sec:sbc #1:php:pha         ;   .11.    =0
  43.   lda #-1:sec:sbc #-1:php:pha       ;   .11.    =0
  44.   lda #2:sec:sbc #1:php:pha         ;   ..1.    =1
  45.   lda #1:sec:sbc #2:php:pha         ;   1...    =-1
  46.   lda #1:sec:sbc #-1:php:pha        ;   ....    =2
  47.   lda #-1:sec:sbc #1:php:pha        ;   1.1.    =-2
  48.   lda #127:sec:sbc #-1:php:pha      ;   1..1    =-128 (wrong)
  49.   lda #1:sec:sbc #-127:php:pha      ;   1..1    =-128 (wrong)
  50.   lda #-128:sec:sbc #1:php:pha      ;   ..11    =127 (wrong)
  51.   lda #-2:sec:sbc #127:php:pha      ;   ..11    =127 (wrong)
  52. ;sbc & carry cleared                    NZCV
  53.   lda #2:clc:sbc #1:php:pha         ;   .11.    =0
  54.   lda #-1:clc:sbc #-2:php:pha       ;   .11.    =0
  55.   lda #3:clc:sbc #1:php:pha         ;   ..1.    =1
  56.   lda #1:clc:sbc #1:php:pha         ;   1...    =-1
  57.   lda #1:clc:sbc #-1:php:pha        ;   ....    =1
  58.   lda #-1:clc:sbc #1:php:pha        ;   1.1.    =-3
  59.   lda #-127:clc:sbc #1:php:pha      ;   ..11    =127 (wrong)
  60.   lda #1:clc:sbc #-127:php:pha      ;   ....    =127
  61.   lda #127:clc:sbc #-127:php:pha    ;   1..1    =-3 (wrong)
  62.  
  63.   ldx #results_end-1-results
  64. .compare_one
  65.   pla
  66.   cmp results,x
  67.   beq no_error
  68. .error
  69.   jmp 0
  70. .no_error
  71.   dex
  72.   pla
  73.   cmp results,x
  74.   bne error
  75.   dex
  76.   bpl compare_one
  77.  
  78.   brk
  79.  
  80. ;Those ones are the results as computed by hand (BDI flags cleared).
  81. .results
  82.   #b %00000000,2,%10000001,-2,%00000011,0,%00000011,0
  83.   #b %00000001,1,%00000001,1,%10000000,-1,%10000000,-1
  84.   #b %01000011,0,%01000001,127,%01000001,127,%11000000,-128
  85.   #b %11000000,-128,%00000000,3,%10000001,-1,%00000011,0
  86.   #b %00000001,1,%10000000,-1,%01000001,1,%10000001,-128
  87.   #b %01000001,127,%11000000,-127,%11000000,-128,%00000011,0
  88.   #b %00000011,0,%00000001,1,%10000000,-1,%00000000,2
  89.   #b %10000001,-2,%11000000,-128,%11000000,-128,%01000001,127
  90.   #b %01000001,127,%00000011,0,%00000011,0,%00000001,1
  91.   #b %10000000,-1,%00000000,1,%10000001,-3,%01000001,127
  92.   #b %00000000,127,%11000000,-3
  93. .results_end